# ======================================================================
# Input params
# ======================================================================
set node_num            [lindex $argv 0]
set movement_Speed      [lindex $argv 1]
set movement_range      [lindex $argv 2]
set time_num            [lindex $argv 3]

# ======================================================================
# Define options
# ======================================================================
set opt(chan)           Channel/WirelessChannel  ;# channel type
set opt(prop)           Propagation/TwoRayGround ;# radio-propagation model
set opt(netif)          Phy/WirelessPhy          ;# network interface type
set opt(mac)            Mac/802_11               ;# MAC type
set opt(ifq)            Queue/DropTail/PriQueue  ;# interface queue type
set opt(ll)             LL                       ;# link layer type
set opt(ant)            Antenna/OmniAntenna      ;# antenna model
set opt(ifqlen)         400                   	 ;# max packet in ifq
set opt(nn)             $node_num                ;# number of mobilenodes
set opt(adhocRouting)   OLSR                     ;# routing protocol

set opt(tr)             "tr/trace_olsr_n${node_num}_v${movement_Speed}_s${movement_range}_i${time_num}.tr"
set opt(na)             "nam/nam_olsr_n${node_num}_v${movement_Speed}_s${movement_range}_i${time_num}.nam"
set opt(sc)             "scene/scene_olsr_n${node_num}_v${movement_Speed}_s${movement_range}_i${time_num}"  ;# connection pattern file
set opt(cb)             "cbr/cbr_olsr_n${node_num}_v${movement_Speed}_s${movement_range}_i${time_num}"    ;# node movement file. 

set opt(x)              $movement_range          ;# x coordinate of topology
set opt(y)              $movement_range          ;# y coordinate of topology
set opt(seed)           0.0                      ;# seed for random number gen.
set opt(stop)           300                      ;# time to stop simulation

# ============================================================================
# TX_range 200m PCS_range 440m
Phy/WirelessPhy set RXThresh_ 8.91754e-10  
Phy/WirelessPhy set CSThresh_ 3.80675e-11

#
# check for random seed
#
if {$opt(seed) > 0} {
    puts "Seeding Random number generator with $opt(seed)\n"
    ns-random $opt(seed)
}

#
# create simulator instance
#
set ns_ [new Simulator]

#
# control OLSR behaviour from this script -
# commented lines are not needed because
# those are default values
#
Agent/OLSR set use_mac_    true
#Agent/OLSR set debug_      false
#Agent/OLSR set willingness 3
#Agent/OLSR set hello_ival_ 2
#Agent/OLSR set tc_ival_    5

#
# open traces
#
set tracefd  [open $opt(tr) w]
set namtrace [open $opt(na) w]
$ns_ trace-all $tracefd
$ns_ namtrace-all-wireless $namtrace $opt(x) $opt(y)

#
# create topography object
#
set topo [new Topography]

#
# define topology
#
$topo load_flatgrid $opt(x) $opt(y)

#
# create God
#
set god_ [create-god $opt(nn)]

set chan [new $opt(chan)]
#
# configure mobile nodes
#
$ns_ node-config -adhocRouting $opt(adhocRouting) \
                 -llType $opt(ll) \
                 -macType $opt(mac) \
                 -ifqType $opt(ifq) \
                 -ifqLen $opt(ifqlen) \
                 -antType $opt(ant) \
                 -propType $opt(prop) \
                 -phyType $opt(netif) \
                 -topoInstance $topo \
                 -wiredRouting OFF \
                 -agentTrace ON \
                 -routerTrace ON \
                 -macTrace OFF \
		         -channel $chan 

for {set i 0} {$i < $opt(nn)} {incr i} {
    set node_($i) [$ns_ node]
	$node_($i) random-motion 0
}

#
# positions
#
source $opt(sc)
source $opt(cb)

#
# print (in the trace file) routing table and other
# internal data structures on a per-node basis
#
# $ns_ at 10.0 "[$node_(0) agent 255] print_rtable"
# $ns_ at 15.0 "[$node_(0) agent 255] print_linkset"
# $ns_ at 20.0 "[$node_(0) agent 255] print_nbset"
# $ns_ at 25.0 "[$node_(0) agent 255] print_nb2hopset"
# $ns_ at 30.0 "[$node_(0) agent 255] print_mprset"
# $ns_ at 35.0 "[$node_(0) agent 255] print_mprselset"
# $ns_ at 40.0 "[$node_(0) agent 255] print_topologyset"

#
# source connection-pattern and node-movement scripts
#
if { $opt(cb) == "" } {
    puts "*** NOTE: no connection pattern specified."
    set opt(cb) "none"
} else {
    puts "Loading connection pattern..."
    source $opt(cb)
}
if { $opt(sc) == "" } {
    puts "*** NOTE: no scenario file specified."
    set opt(sc) "none"
} else {
    puts "Loading scenario file..."
    source $opt(sc)
    puts "Load complete..."
}

#
# define initial node position in nam
#
#for {set i 0} {$i < $opt(nn)} {incr i} {
#    $ns_ initial_node_pos $node_($i) 20
#}     

#
# tell all nodes when the simulation ends
#
for {set i 0} {$i < $opt(nn) } {incr i} {
    $ns_ at $opt(stop).0 "$node_($i) reset";
}

$ns_ at $opt(stop).0002 "puts \"NS EXITING...\" ; $ns_ halt"
$ns_ at $opt(stop).0001 "stop"

proc stop {} {
    global ns_ tracefd namtrace
    $ns_ flush-trace
    close $tracefd
    close $namtrace
    #exec nam olsr_1.nam &
    exit 0
}

#
# begin simulation
#
puts "Starting Simulation..."

$ns_ run
